# To change this template, choose Tools | Templates
# and open the template in the editor.

require 'utente'

class Jaccard
  attr_accessor :testo

  def initialize()
    @testo="--------------"
  end

# Copia profonda di un vettore
def copia_vet(vet)
  tmp = []
  (0..vet.size-1).each{|i| tmp.push(vet[i])}
  return tmp
end

# Copia profonda di un vettore e conversione elemnti da Stringa a Numerico
def copia_vetN(vet)
  tmp = []
  (0..vet.size-1).each{|i| tmp.push(vet[i].to_i)}
  return tmp
end

def inter(x=[], y=[], val1=[], val2=[])
  c=[]
  tmp = copia_vet(x)

  (0..tmp.size-1).each{|i|
    if val1!=[] && val2!=[]
      self.testo = "Pesudo Binario 2 Parametri \n\n\n"
      if (tmp[i]==val1 || tmp[i]==val2)
        c.push(y[i])
      end
     elsif val1==0
       self.testo = "Pesudo Binario 1 Parametri \n\n\n"
       if tmp[i]==y[i]
         c.push(y[i])
       end
     else
       if tmp.member?(y[i])
         self.testo = "Binario 0 Parametri \n\n\n"
         c.push(y[i])
       end
    end
  }
  return c.size
end

# Dati 2 vettori numerici restiruisce la cardinalita dell'ins. Unione
def union(x=[], y=[])
  c = copia_vet(x)
  tmp = copia_vet(x)
  (0..tmp.size-1).each{|i|
    if !tmp.include?(y[i])
      c.push(y[i])
    end
  }
  return c.size
end

# Dati 2 vettori tipo Stringa restiruisce l'idice di Jacobs
# Se passato senza parametri applica Jaccard Binario
# Se passato con parametri val1/2 applica Pseudo Jaccard su 2 valori,
# Se passato con il valore 0 si ha pseudo ricerca binaria sulla presenza,
# verifica valori uguali in posizioni uguali di 2 utenti


def ind_jac(x, y, val1=[], val2=[])
  t=[]
  out = 0
  x1 = copia_vetN(x)
  y1 = copia_vetN(y)
  # print("Intersezione -> ",inter(x1,y1,val1,val2),"; Unione -> ",union(x1,y1).to_f,"\n")
  return inter(x1,y1,val1,val2)/union(x1,y1).to_f
 end
def ind_jac_matrix(matrix, y)
  sim= []
  matrix.each{|x|
    sim.push(self.ind_jac(x, y, 0))
  }

  return sim
end


def Jaccard.test()
  a = ["1","2","3"]
  b = ["1","2","3"]
  print("Vettori Utenti\n")
  print("----------------------------------------\n")
  print (" Utente A = ")
  p a
  print (" Utente B = ")
  p b
  print("----------------------------------------\n\n\n")

  print("self.ind_jac(a,b) - Valore Atteso 1 per ogni utente -> ", self.ind_jac(a,b),"\n")
  print(self.testo,"\n","---------------------------------\n")
  print("ind_jac(a,b,1,1) - PseudoBinario(1,1) -> ", self.ind_jac(a,b,1,1),"\n")
  print(self.testo,"\n","---------------------------------\n")
  print("ind_jac(a,b,1,2) - PseudoBinario(1,2) -> ", self.ind_jac(a,b,1,2),"\n")
  print(self.testo,"\n","---------------------------------\n")
  print("ind_jac(a,b,0) - PseudoBinario() a[i]==b[i] -> ", self.ind_jac(a,b,0),"\n")
end

end